#ifndef PROGRAMSETTINGS_H
#define PROGRAMSETTINGS_H

#include <QStringList>
#include <QFile>
#include <QDebug>
#include <QByteArray>
#include "parser.h"
#include <string>
#include <map>

/* Клас ProgramSettings забезпечує налаштування програми за допомогою файла конфігурації program.conf */

class ProgramSettings
{
    enum SettingsFlags { Default, NoDefault };
    Grammar grammar; // граматика файла конфігурації program.conf
    std::map<QString, std::map<QString, int> > file_data_tree;
    std::map<QString, QStringList> sections; // дані секцій, які доступні користувачу при регістрації
    QStringList sections_name_list;
    void __setSettings(SettingsFlags); // встановлюємо параметри програми
    void __getBufIndexWithoutSpace(QByteArray&, uint&);
    void __makeDataForWidget();
    static void __makeDataForWidgetOP(QString, ProgramSettings*);
    static void __makeDataForWidgetOP2(std::pair<const QString, int>, QStringList&);
public:
    ProgramSettings();
    bool loadSettings(); // читає файл program.conf для налаштування програми
    std::map<QString, QStringList> &getSectionsData() { return sections; }
    const QStringList &getSectionsNameLists() const { return sections_name_list; }
};

#endif // PROGRAMSETTINGS_H
